package thread;

/**
 * 线程终止
 */
public class ThreadExit {

    public static void main(String[] args) throws InterruptedException {

        /*
            当线程完成任务后，会自动退出
            还可以通过使用变量来控制run方法退出的方式停止线程，即通知方式

            例：
            启动一个线程t 并在 main 线程中去停止线程 t
         */

        T t = new T();
        t.start();

        //如果希望主线程控制t线程的终止，必须可以修改loop变量
        //让t退出 run() 从而终止 t 线程 -> 通知方式

        //让主线程休眠10s再通知t线程退出
        Thread.sleep(10 * 1000);
        t.setLoop(false);
    }
}


class T extends Thread {

    private int count = 1;

    //设置一个控制变量
    private boolean loop = true;

    @Override
    public void run() {
        while (loop) {
            try {
                Thread.sleep(50);//让当前线程休眠50ms
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("线程T还在运行中..." + ++count);
        }
    }

    public void setLoop(boolean loop) {
        this.loop = loop;
    }
}